測試,是品質的重要基石之一。
很久很久之前,寫程式的時候就體會到,每次改個bug,或是修改DB,或是過一陣子想要測試程式還對不對的時候,在web page上總是要重複輸入一些資料,來驗證執行是否正確,是否改了底層會影響到原本的程式運作。有時候表單的資料一多,這個輸入的動作,就會讓人很不愉悅。所以,出現了很多Web測試的工具,有的需要自己寫code,有的可以直接錄製,有的很貴,有的很麻煩。
這邊就針對一些Web測試與JavaScript單元測試的工具簡介一下。
[如何提升系統品質]系列文章連結
IEUnit
我的第一個web的自動測試,是用IEUnit寫的,來源是參考黑大的這一篇文章:Artile-Automatic Web Testing, With IEUnit。IEUnit的好處是,只要會寫javascript大概就能自己透過javascript抓到DOM的位置,去塞值跟驗證資料。遇到特殊的alert、dialog和fileupload,黑大的文章也有針對這種特殊需求進行一番說明。
而IEUnit的問題點是:
1.Only for IE,而且當我升級到IE8的時候好像有點問題。
2.沒記錯的話,應該要安裝.Net Framework 1.1。(這對當時support JAVA team來說,他們全然不能接受要灌這種奇怪的東西。)
3.雖然IDE要自動長語法只需要click畫面上的元素,或是用滑鼠右鍵基本上就可以選到自己差不多想要的DOM,不過還是少了『錄製』的功能,撰寫時也沒有快樂的intellisense可以用。
4.當時在用的時候,IEUnit的程式很容易當掉。
其實在黑大的文章中,也有很明確的需求比較,有興趣的人可以看一下,IEUnit是否符合自己的web測試需求。
VSTS2005
第二個練習的web測試是VSTS2005,基本上有錄製的功能,不過沒記錯的話,應該主要是focus在Request跟Response,VSTS不便宜啊...加上並不是這麼直覺,所以當時並沒有摸的太徹底。(其實覺得IDE的功能太多,反而很複雜…)
有興趣的請參考這篇文章:
Microsoft Visual Studio 2005 Team System Web Testing 簡介
WatiN
第三個是WatiN (Web Application Testing In .NET),官網參考:http://watin.sourceforge.net/ 。寫起來很像在寫一般的NUnit程式,不過也是透過WatiN的API去撰寫Web的UI測試程式。驅動的方式也跟NUnit很像,一跑下去就會看到打開瀏覽器,然後畫面就一直被測試程式填值、操作、驗證。
好處是,可以由Code控制,就代表幾乎啥都能自己幹了。
缺點是,要會寫Code的人才能進行Web的自動測試。
恩…通常測試的事,在很多公司是由所謂的QA或是SA或是工讀生來做,除非有專屬的測試團隊,或是一開始就有撰寫自動測試習慣的開發團隊。而通常兼著測試人員的QA、SA跟工讀生,都不怎麼會寫程式…
相關的範例實作和簡介,可以參考這一篇:[技術分享]UI自動測試 WatiN。(記得搭配IE的Developer Tool或是Firebug,還有搭配WatiN Test Recorder這個工具,會有半自動錄製的功能,為何說半自動…因為一年半前錄起來很多東西不能跑)
Windows PowerShell
第四個是很有趣的東西,是用Windows PowerShell,可以參考:使用 Windows PowerShell 進行 UI 自動化。不過對我這還不太會寫PowerShell,也不會寫Winform程式的人來說,Cmdlet跟這種介面,實在讓人有不小的恐懼跟學習障礙啊。(不過Windows PowerShell應該是個投資報酬比相當高的技術,有機會一定要好好學起來一下。)
QUnit
第五個找到的是跟著jQuery火紅起來的QUnit,官網:http://docs.jquery.com/QUnit。範例跟入門可以參考這篇文章:Getting Started With jQuery QUnit for Client-Side Javascript Testing。對會jQuery的人來說,可以用jQuery來定位要操作的DOM,是一件相當快樂的事。不過抱歉,我對QUnit也不太熟悉…只有練習過,並沒有實際用在開發專案上的經驗。QUnit為JavaScript的Unit Test。
FireUnit
第六個不是for Web UI的測試,但是是for javascript的Unit Test,作者是jQuery的開發者:John Resig,下載網址:http://fireunit.org/,參考文章可以參考這篇:Unit Testing JavaScript with FireUnit。(不過我想,應該比較少人會寫javascript的unit test,除了一些公用的function,或轉換的function,或撰寫plug-in)
Lightweight Test Automation Framework
第七個是很酷炫的Lightweight Test Automation Framework ,ASP.NET QA Team似乎就是用這一套在測他們的產品,
Sample下載下來跑,真的很酷,不過跟WatiN類似,也是得自己熟悉這個framework的API,才比較知道是怎麼操作DOM跟驗證的。
一樣,沒有錄製的功能...
Selenium
第八個,是目前正在玩的Selenium,在黑大的文章裡面,其實也有介紹到這個東西。不過當時沈迷於IEUnit,想說黑大不用,一定是因為它不好用。後來因緣際會的在Plurk上,一位在Yahoo的前輩建議使用Selenium來做Web自動化測試,既可無腦錄製,又可全手動撰寫,外加免費,而且錄製轉換完的CODE可以給不同瀏覽器使用,錄製完轉換的功能還可以for不同語言,一整個強大又貼近需求。
壞處是Selenium IDE的功能是for Firefox的plug-in使用,(有一些只能跑IE的系統,搭配不會寫程式的SA,還是只能乾瞪眼) 但真的上手極為簡單,重複使用性高,維護也很容易。
錄製完的CODE,其實轉成.NET,就跟WatiN一樣,長的跟NUint很像,也可以由NUnit驅動。(跑CI的時候也很酷,自動建置跟驅動的時候,會看到開瀏覽器起來跑,再自己關掉)
對了,額外一提,要轉成CODE去跑的時候,要安裝Selenium Remote Control (RC),恩…要有java的環境,才能跑Selenium RC server起來,請記得java有分x64和x86的版本。
VS2010
第九個是VS2010的Web測試功能,我也有小小玩了一下,…VS2010標榜的測試功能,很屌,因為不再只是錄製與驗證Request跟Response,而是可以從OS的環境就開始錄製。
另外有一整套的Test Suite,可以提高Test Case的重用性,當然,跟TFS綁在一起,也是為了其他的目的,當測試發現BUG的時候,可以透過TFS記錄與assign給開發團隊,會有錯誤的資訊跟畫面,如果已經有在用TFS的,不妨可以玩一下,成本應該不會增加太多!可以參考一下Jason Zanders的文章:VS2010 Tutorial: Testing Tutorial (Step 2)
TestPartner
第十個是TestPartner,也是一套可以直接錄製,轉換成測試程式的工具,不過要錢,有興趣的可以自行點進去網址看簡介。
結論
以上,是目前有survey過的一些用來做web test的工具,有一些有實際用在專案開發上,有一些只是稍微的練習一下網站上的sample,有一些則是現實考量因素,玩過就丟了。有機會再詳細一點介紹上述的工具使用經驗,也歡迎各位前輩先進提出自己使用這些工具的經驗與指導。
目前自己用的最上手的是Selenium,不過大部分的web test工具,比較大的問題還是卡在Flash跟Silverlight。
而最大的阻礙,當然還是需求的變動啦,所以除了開發產品比較有投資報酬率以外,專案開發應該還是挺難推動。基本上web test還是建議,只錄製主要流程,或是正常操作,針對重點且穩定不變網頁,Assert的驗證多一點。
但是拿來自我驗證或重複輸入資料,還是相當愉快就是了。看著瀏覽器自己會輸入值,自己操作頁面,就會莫名的有種快感啊!(不知情的人會以為你用念力在操作網頁)